#ifndef OJLB_OJ_COMPILER_OJ_COMPILER_H_
#define OJLB_OJ_COMPILER_OJ_COMPILER_H_
#include <unistd.h>
#include <fcntl.h>
#include <sys/wait.h>
#include <string>
#include <cstdio>
#include "oj_common/oj_code_file.h"
#include "oj_common/oj_log.h"
#include "oj_common/oj_strea_edirection.h"
namespace ojlb {
namespace oj_compiler_run {


// 类定义
class OjCompiler {
public:
    static bool compile(const ojlb::oj_common::OjCodeFile& oj_code_file); // 编译方法

private:
    static void checkComplieEnv(const oj_common::OjCodeFile& oj_code_file); // 检查编译环境
    static void cleanCompileEnv(const oj_common::OjCodeFile& oj_code_file); // 清理编译环境
    static void handleForkError(); // 处理编译异常
    static void handleChildProcess(const oj_common::OjCodeFile& oj_code_file); // 处理子进程任务
    static bool handleParentProcess(const pid_t& fork_result, const oj_common::OjCodeFile& oj_code_file, oj_common::OjStreaEdirection ojse); // 处理父进程任务
}; // class OjCompiler end


} // namespace oj_compiler_run end
} // namespace ojlb end
#endif
